package com.hsylient.javase.chapter02.demo01.demo02;

/**
 * manager类是employ的子类
 * 是is-a的关系，经理也是一个员工，所以这里经理继承了员工类
 * 在employ中没有提供无参数的构造方法，所以想要实例化子类就必须调用父类的构造方法，去初始化继承父类中的属性
 */
import lombok.ToString;

@ToString(callSuper = true)
public class Manager extends Employ {

    private Double bonus;

    public Manager(Integer id, String name, Double salary, Double bonus) {
        super(id, name, salary);
        this.bonus = bonus;
    }

    public Double getBonus() {
        return bonus;
    }

    public void setBonus(Double bonus) {
        this.bonus = bonus;
    }

    /**
     * 这里经理是有奖金的，那就是薪水加上奖金是个人的工资
     * salary这个属性被private修饰，那么只能在本类中访问到，所以想要得到这个属性需要调用getter方法
     * 但是如果在getter方法中调用getter方法那么就递归了，引入关键之super
     * super的作用就是调用父类的方法，它跟this不一样，this表示当前对象它里边存的有内存地址，是真实的数据
     * super是一个关键字没有实际的意义，给虚拟机看的，虚拟机看到这个关键字就知道调用父类的方法了
     */
    @Override
    public Double getSalary() {
        return super.getSalary() + this.bonus;
    }
}
